from adapt.interface.ICapability import ICapability, ILibrary, IInclude

class LifeVCapabilities(ICapability):
    def __init__(self):
        super().__init__()
        # standard LifeV interface includes libraries
        for l in ('lifevecm2', 'lifevoperator', 'lifevnavierstokes', 'lifevcore'):
            self.add(ILibrary('lib' + l + '.so'))
        # and some headers
        includes = \
"""lifev/ecm2/util/SerialDistributedMatrix.hpp
lifev/ecm2/util/SerialDenseUtilities.hpp
lifev/ecm2/algorithm/VectorManipulation.hpp
lifev/ecm2/function/HeartBeat.hpp
lifev/ecm2/function/Spline.hpp
lifev/ecm2/function/DataFunctions.hpp
lifev/ecm2/function/WomersleyFunctor.hpp
lifev/ecm2/function/WindkesselRCR.hpp
lifev/ecm2/function/FourierExpansion.hpp
lifev/ecm2/solver/HarmonicAssembler.hpp
lifev/ecm2/solver/SEOperatorAssembler.hpp
lifev/ecm2/solver/SEOperatorSolver.hpp
lifev/ecm2/solver/OseenHandlerPlus.hpp
lifev/ecm2/solver/HarmonicSolver.hpp
lifev/ecm2/navier_stokes/SingleInflowBloodFlowNSApplication.hpp
lifev/ecm2/navier_stokes/StabilizationSDAssembler.hpp
lifev/ecm2/navier_stokes/NSApplication.hpp
lifev/ecm2/navier_stokes/BloodFlowNSApplication.hpp
lifev/ecm2/navier_stokes/OseenHandler.hpp
lifev/ecm2/navier_stokes/StabilizationBackflowAssembler.hpp
lifev/ecm2/navier_stokes/NavierStokesSolver.hpp
lifev/ecm2/mesh/MeshUtils.hpp
lifev/ecm2/mesh/PointLocator.hpp
lifev/ecm2/mesh/MeshExtractor.hpp
lifev/ecm2/fem/SurfaceMassAssembler.hpp
lifev/ecm2/fem/SurfaceFESpace.hpp
lifev/ecm2/fem/ThreeFieldsDofMatchingInterface.hpp
lifev/navier_stokes/solver/OseenSolverShapeDerivative.hpp
lifev/navier_stokes/solver/OseenData.hpp
lifev/navier_stokes/solver/StabilizationSD.hpp
lifev/navier_stokes/solver/StabilizationIP.hpp
lifev/navier_stokes/solver/OseenAssembler.hpp
lifev/navier_stokes/solver/OseenSolver.hpp
lifev/navier_stokes/function/KimMoin.hpp
lifev/navier_stokes/function/bessel/bessel.hpp
lifev/navier_stokes/function/Womersley.hpp
lifev/navier_stokes/function/RossEthierSteinmanDec.hpp
lifev/navier_stokes/function/RossEthierSteinmanInc.hpp
lifev/core/LifeVersion.hpp
lifev/core/array/VectorContainer.hpp
lifev/core/array/MatrixEpetraStructuredView.hpp
lifev/core/array/RNM.hpp
lifev/core/array/MatrixEpetraStructuredUtility.hpp
lifev/core/array/ArraySimple.hpp
lifev/core/array/MatrixElemental.hpp
lifev/core/array/VectorEpetraStructured.hpp
lifev/core/array/RNMOperator.hpp
lifev/core/array/MapEpetra.hpp
lifev/core/array/MatrixEpetra.hpp
lifev/core/array/MatrixPattern.hpp
lifev/core/array/RNMOperatorConstant.hpp
lifev/core/array/MapVector.hpp
lifev/core/array/VectorEpetraStructuredView.hpp
lifev/core/array/RNMTemplate.hpp
lifev/core/array/VectorSmall.hpp
lifev/core/array/MatrixEpetraStructured.hpp
lifev/core/array/MatrixContainer.hpp
lifev/core/array/VectorEpetra.hpp
lifev/core/array/VectorElemental.hpp
lifev/core/filter/PartitionIO.hpp
lifev/core/filter/ExporterHDF5.hpp
lifev/core/filter/Importer.hpp
lifev/core/filter/ExporterEnsight.hpp
lifev/core/filter/ImporterMesh3D.hpp
lifev/core/filter/ExporterHDF5Mesh3D.hpp
lifev/core/filter/ExporterEmpty.hpp
lifev/core/filter/GetPot.hpp
lifev/core/filter/Exporter.hpp
lifev/core/filter/MeshWriter.hpp
lifev/core/filter/ImporterMesh2D.hpp
lifev/core/filter/ExporterVTK.hpp
lifev/core/solver/ADRData.hpp
lifev/core/solver/ADRAssemblerIP.hpp
lifev/core/solver/HyperbolicSolver.hpp
lifev/core/solver/ADRAssembler.hpp
lifev/core/solver/GradientCalculator.hpp
lifev/core/solver/GradientAssembler.hpp
lifev/core/solver/HyperbolicData.hpp
lifev/core/algorithm/NonLinearBrent.hpp
lifev/core/algorithm/PreconditionerComposed.hpp
lifev/core/algorithm/PreconditionerML.hpp
lifev/core/algorithm/ComposedOperator.hpp
lifev/core/algorithm/SolverAmesos.hpp
lifev/core/algorithm/NonLinearAitken.hpp
lifev/core/algorithm/PreconditionerAztecOO.hpp
lifev/core/algorithm/Preconditioner.hpp
lifev/core/algorithm/PreconditionerIfpack.hpp
lifev/core/algorithm/SolverAztecOO.hpp
lifev/core/algorithm/NonLinearRichardson.hpp
lifev/core/algorithm/NonLinearLineSearch.hpp
lifev/core/algorithm/EigenSolver.hpp
lifev/core/algorithm/LinearSolver.hpp
lifev/core/mesh/MeshData.hpp
lifev/core/mesh/MeshEntityContainer.hpp
lifev/core/mesh/InternalEntitySelector.hpp
lifev/core/mesh/MeshElement.hpp
lifev/core/mesh/MeshUtility.hpp
lifev/core/mesh/RegionMesh.hpp
lifev/core/mesh/MeshVertex.hpp
lifev/core/mesh/RegionMesh3DStructured.hpp
lifev/core/mesh/Marker.hpp
lifev/core/mesh/RegionMesh2DStructured.hpp
lifev/core/mesh/RegionMesh1DBuilders.hpp
lifev/core/mesh/MeshEntity.hpp
lifev/core/mesh/MeshElementMarked.hpp
lifev/core/mesh/MeshElementBare.hpp
lifev/core/mesh/MeshPartitioner.hpp
lifev/core/mesh/ElementShapes.hpp
lifev/core/mesh/BareMesh.hpp
lifev/core/mesh/MeshChecks.hpp
lifev/core/mesh/MarkerDefinitions.hpp
lifev/core/operator/SolverOperator.hpp
lifev/core/operator/BelosOperator.hpp
lifev/core/operator/AztecooOperator.hpp
lifev/core/operator/LinearOperator.hpp
lifev/core/fem/QuadratureRule.hpp
lifev/core/fem/CurrentFE.hpp
lifev/core/fem/QuadraturePoint.hpp
lifev/core/fem/QuadratureRuleProvider.hpp
lifev/core/fem/PostProcessing.hpp
lifev/core/fem/BCHandler.hpp
lifev/core/fem/Assembly.hpp
lifev/core/fem/BCVector.hpp
lifev/core/fem/DOFInterface.hpp
lifev/core/fem/BCDataInterpolator.hpp
lifev/core/fem/CurrentBoundaryFE.hpp
lifev/core/fem/DOFInterface3Dto3D.hpp
lifev/core/fem/TimeData.hpp
lifev/core/fem/BCManage.hpp
lifev/core/fem/BCFunction.hpp
lifev/core/fem/SobolevNorms.hpp
lifev/core/fem/TimeAdvanceBDFNavierStokes.hpp
lifev/core/fem/DOFInterface3Dto2D.hpp
lifev/core/fem/FEField.hpp
lifev/core/fem/GeometricMap.hpp
lifev/core/fem/ReferenceFEHybrid.hpp
lifev/core/fem/DOF.hpp
lifev/core/fem/HyperbolicFluxNumerical.hpp
lifev/core/fem/FEFunction.hpp
lifev/core/fem/BCBase.hpp
lifev/core/fem/BCManageNormal.hpp
lifev/core/fem/DOFLocalPattern.hpp
lifev/core/fem/BCIdentifier.hpp
lifev/core/fem/FESpace.hpp
lifev/core/fem/ReferenceFEHdiv.hpp
lifev/core/fem/AssemblyElemental.hpp
lifev/core/fem/TimeAdvanceBDFVariableStep.hpp
lifev/core/fem/TimeAdvanceBDF.hpp
lifev/core/fem/ReferenceElement.hpp
lifev/core/fem/CurrentBoundaryFEBase.hpp
lifev/core/fem/TimeAdvance.hpp
lifev/core/fem/PostProcessingBoundary.hpp
lifev/core/fem/ReferenceFEScalar.hpp
lifev/core/fem/TimeAdvanceNewmark.hpp
lifev/core/fem/ReferenceFE.hpp
lifev/core/function/Laplacian.hpp
lifev/core/util/LifeAssertSmart.hpp
lifev/core/util/Switch.hpp
lifev/core/util/FactoryPolicy.hpp
lifev/core/util/LifeChrono.hpp
lifev/core/util/Factory.hpp
lifev/core/util/CBlas.hpp
lifev/core/util/ParserDefinitions.hpp
lifev/core/util/StringData.hpp
lifev/core/util/Displayer.hpp
lifev/core/util/FortranWrapper.hpp
lifev/core/util/LifeAssert.hpp
lifev/core/util/EncoderBase64.hpp
lifev/core/util/ParserSpiritGrammar.hpp
lifev/core/util/Parser.hpp
lifev/core/util/StringUtility.hpp
lifev/core/util/FactorySingleton.hpp
lifev/core/util/FactoryTypeInfo.hpp
lifev/core/util/CLapack.hpp
lifev/core/util/LifeDebug.hpp
lifev/core/LifeV.hpp
lifev/operator/navier_stokes/ALOperator.hpp
lifev/operator/navier_stokes/OseenOperatorManagerAL.hpp
lifev/operator/navier_stokes/LeastSquaresCommutator.hpp
lifev/operator/navier_stokes/OseenOperatorManager.hpp
lifev/operator/navier_stokes/OseenOperatorManagerLSC.hpp
lifev/operator/navier_stokes/OseenSolverAL.hpp
lifev/operator/navier_stokes/SolverAL.hpp
lifev/operator/navier_stokes/OseenOperatorManagerHOY.hpp
lifev/operator/navier_stokes/PreconditionerAL.hpp
lifev/operator/navier_stokes/HighOrderYosida.hpp
lifev/operator/navier_stokes/DiscreteLaplacian.hpp
lifev/operator/navier_stokes/ALVectorOperation.hpp
lifev/operator/linear_algebra/BlockOperator.hpp
lifev/operator/linear_algebra/IfpackPreconditioner.hpp
lifev/operator/linear_algebra/RowMatrixPreconditioner.hpp
lifev/operator/linear_algebra/LinearOperator.hpp
lifev/operator/linear_algebra/BlockEpetra_Map.hpp
lifev/operator/linear_algebra/TwoLevelOperator.hpp
lifev/operator/linear_algebra/BlockEpetra_MultiVector.hpp
lifev/operator/linear_algebra/CompositeOperator.hpp
lifev/operator/linear_algebra/ApproximatedInvertibleRowMatrix.hpp
lifev/operator/linear_algebra/BelosOperator.hpp
lifev/operator/linear_algebra/InvertibleOperator.hpp
lifev/operator/linear_algebra/TwoLevelPreconditioner.hpp
lifev/operator/linear_algebra/MLPreconditioner.hpp
lifev/operator/linear_algebra/LumpedOperator.hpp
lifev/operator/linear_algebra/AztecooOperator.hpp
lifev/operator/fem/InterpolationMatrix.hpp
"""
        for h in includes.split():
            self.add(IInclude(h)) 